/**
 * 分享工具类
 */
export class ShareUtils {
  /**
   * 显示分享选项弹窗
   * @param {Array} options 分享选项列表
   * @param {Function} callback 回调函数
   */
  static showShareOptions(options = ['分享给好友', '分享到朋友圈', '生成分享海报', '复制链接'], callback) {
    uni.showActionSheet({
      itemList: options,
      success: (res) => {
        if (callback && typeof callback === 'function') {
          callback(res.tapIndex)
        }
      }
    })
  }

  /**
   * 复制链接到剪贴板
   * @param {string} url 要复制的链接
   * @param {Function} successCallback 成功回调
   * @param {Function} failCallback 失败回调
   */
  static copyLink(url, successCallback, failCallback) {
    uni.setClipboardData({
      data: url,
      success: () => {
        uni.showToast({ title: '链接已复制', icon: 'success' })
        if (successCallback && typeof successCallback === 'function') {
          successCallback(url)
        }
      },
      fail: () => {
        uni.showToast({ title: '复制失败', icon: 'none' })
        if (failCallback && typeof failCallback === 'function') {
          failCallback()
        }
      }
    })
  }

  /**
   * 生成分享海报
   * @param {Object} shareData 分享数据
   * @param {Function} callback 回调函数
   */
  static generatePoster(shareData, callback) {
    // 新版：使用画布组件绘制富信息海报
    if (!shareData) {
      uni.showToast({ title: '暂无分享数据', icon: 'none' })
      return
    }
    const pages = getCurrentPages()
    const current = pages[pages.length - 1]
    const proxy = current.$vm || current
    if (!proxy) {
      uni.showToast({ title: '生成失败，请重试', icon: 'none' })
      return
    }

    // 动态挂一个弹层组件
    if (!proxy.$refs || !proxy.$refs.__poster__) {
      // 通过条件渲染由页面提供占位。若无占位则退回旧逻辑
      if (typeof proxy.openPoster !== 'function') {
        // 兜底：仍然使用老的“直接用图”方案
        const imageUrl = shareData.imageUrl
        if (!imageUrl) {
          uni.showToast({ title: '暂无可用海报图片', icon: 'none' })
          return
        }
        uni.getImageInfo({
          src: imageUrl,
          success: (res) => {
            callback && callback({ ...shareData, posterPath: res.path || res.tempFilePath || imageUrl })
            uni.previewImage({ current: res.path || imageUrl, urls: [res.path || imageUrl] })
          },
          fail: () => uni.previewImage({ urls: [imageUrl] })
        })
        return
      }
    }

    // 传入完整数据供画布绘制
    proxy.openPoster({
      title: shareData.title,
      imageUrl: shareData.imageUrl,
      time: shareData.time,
      deadline: shareData.deadline,
      address: shareData.address,
      price: shareData.price
    }, (filePath) => {
      if (callback && typeof callback === 'function') {
        callback({ ...shareData, posterPath: filePath })
      }
    })
  }

  /**
   * 记录分享事件
   * @param {string} type 分享类型
   * @param {Object} data 分享数据
   */
  static recordShareEvent(type, data = {}) {
    const shareRecord = {
      type: type,
      data: data,
      timestamp: new Date().toISOString(),
      userAgent: uni.getSystemInfoSync()
    }
    
    console.log('分享事件记录:', shareRecord)
    
    // 这里可以调用后端API记录分享统计
    // API_SHARE_RECORD_POST(shareRecord)
    
    return shareRecord
  }

  /**
   * 获取当前页面URL
   * @param {string} path 页面路径
   * @param {string} query 查询参数
   * @returns {string} 完整URL
   */
  static getCurrentPageUrl(path = '', query = '') {
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]
    const options = currentPage.options
    
    if (!path) {
      path = currentPage.route
    }
    
    if (!query) {
      query = Object.keys(options).map(key => `${key}=${options[key]}`).join('&')
    }
    
    // 生成可打开小程序的链接
    const miniProgramPath = `${path}?${query}`
    const appId = 'wx4d18fe81afe71a3d' // 你的小程序AppID
    
    // 方案1：使用微信官方推荐的链接格式
    // 注意：这个格式需要小程序已经发布并且配置了相应的权限
    const officialLink = `weixin://dl/business/?appid=${appId}&path=${encodeURIComponent(miniProgramPath)}`
    
    // 方案2：如果官方链接不工作，使用备用方案
    // 生成一个包含页面信息的文本，用户可以手动搜索小程序
    const fallbackText = `小程序名称：活动详情\n页面路径：${miniProgramPath}\n请搜索小程序或扫描小程序码进入`
    
    // 返回官方链接，如果不行可以提示用户使用备用方案
    return officialLink
  }

  /**
   * 创建分享数据对象
   * @param {Object} data 原始数据
   * @returns {Object} 格式化后的分享数据
   */
  static createShareData(data) {
    return {
      title: data.title || data.name || '活动详情',
      desc: data.desc || data.describe || '点击查看活动详情',
      imageUrl: data.imageUrl || data.master_image || '',
      path: data.path || '/pages/eventActivity/eventActivityDetail/index',
      query: data.query || `id=${data.id || ''}`
    }
  }

  /**
   * 分享到微信好友
   * @param {Object} shareData 分享数据
   */
  static shareToFriend(shareData) {
    this.recordShareEvent('share_to_friend', shareData)
    uni.showToast({ title: '请点击右上角分享按钮', icon: 'none' })
  }

  /**
   * 分享到朋友圈
   * @param {Object} shareData 分享数据
   */
  static shareToTimeline(shareData) {
    this.recordShareEvent('share_to_timeline', shareData)
    uni.showToast({ title: '请点击右上角分享按钮', icon: 'none' })
  }
}

/**
 * 微信小程序分享配置生成器
 */
export class ShareConfigGenerator {
  /**
   * 生成分享给好友的配置
   * @param {Object} shareData 分享数据
   * @returns {Object} 分享配置
   */
  static generateAppMessageConfig(shareData) {
    ShareUtils.recordShareEvent('share_to_friend', shareData)
    
    return {
      title: shareData.title || '活动详情',
      desc: shareData.desc || '点击查看活动详情',
      path: shareData.path || '/pages/eventActivity/eventActivityDetail/index',
      imageUrl: shareData.imageUrl || '',
      success: () => {
        uni.showToast({ title: '分享成功', icon: 'success' })
      },
      fail: () => {
        uni.showToast({ title: '分享失败', icon: 'none' })
      }
    }
  }

  /**
   * 生成分享到朋友圈的配置
   * @param {Object} shareData 分享数据
   * @returns {Object} 分享配置
   */
  static generateTimelineConfig(shareData) {
    ShareUtils.recordShareEvent('share_to_timeline', shareData)
    
    return {
      title: shareData.title || '活动详情',
      query: shareData.query || `id=${shareData.id || ''}`,
      imageUrl: shareData.imageUrl || '',
      success: () => {
        uni.showToast({ title: '分享成功', icon: 'success' })
      },
      fail: () => {
        uni.showToast({ title: '分享失败', icon: 'none' })
      }
    }
  }

  /**
   * 生成新闻详情页分享配置
   * @param {Object} newsData 新闻数据
   * @returns {Object} 分享配置
   */
  static generateNewsDetailShareConfig(newsData) {
    const shareData = {
      title: newsData.title || '新闻详情',
      desc: newsData.content ? newsData.content.replace(/<[^>]+>/g, '').substring(0, 100) + '...' : '点击查看新闻详情',
      imageUrl: newsData.cover_image || '',
      path: '/pages/news/detail',
      query: `id=${newsData.id || ''}`
    }
    
    return {
      shareData,
      options: ['分享给好友', '分享到朋友圈', '复制链接'],
      callback: (index) => {
        switch (index) {
          case 0:
            ShareUtils.shareToFriend(shareData)
            break
          case 1:
            ShareUtils.shareToTimeline(shareData)
            break
          case 2:
            const url = ShareUtils.getCurrentPageUrl('/pages/news/detail', `id=${newsData.id}`)
            ShareUtils.copyLink(url)
            break
        }
      }
    }
  }

  /**
   * 生成个人主页分享配置
   * @param {string} name 用户姓名
   * @param {string} avatar 用户头像
   * @param {number} likes 获赞数
   * @param {number} fans 粉丝数
   * @returns {Object} 分享配置
   */
  static generatePersonalHomepageShareConfig(name, avatar, likes, fans) {
    const shareData = {
      title: `${name}的个人主页`,
      desc: `获赞${likes}，粉丝${fans}，快来关注吧！`,
      imageUrl: avatar || '',
      path: '/pages/personalHomepage/index',
      query: `userId=${name}` // 这里可以根据实际需求传递用户ID
    }
    
    return {
      shareData,
      options: ['分享给好友', '分享到朋友圈', '复制链接'],
      callback: (index) => {
        switch (index) {
          case 0:
            ShareUtils.shareToFriend(shareData)
            break
          case 1:
            ShareUtils.shareToTimeline(shareData)
            break
          case 2:
            const url = ShareUtils.getCurrentPageUrl('/pages/personalHomepage/index', `userId=${name}`)
            ShareUtils.copyLink(url)
            break
        }
      }
    }
  }
}

// 导出默认实例
export default ShareUtils 